{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "3aa01f43",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from tqdm import tqdm\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import f1_score\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "import lightgbm as lgb\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体设置-黑体\n",
    "plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题\n",
    "sns.set(font='SimHei',font_scale=1.5)  # 解决Seaborn中文显示问题并调整字体大小\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "82369296",
   "metadata": {},
   "source": [
    "# 任务1：报名比赛"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0d943cf7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(5070, 10) (1000, 9)\n",
      "--------------------\n",
      "编号            int64\n",
      "性别            int64\n",
      "出生年份          int64\n",
      "体重指数        float64\n",
      "糖尿病家族史       object\n",
      "舒张压         float64\n",
      "口服耐糖量测试     float64\n",
      "胰岛素释放实验     float64\n",
      "肱三头肌皮褶厚度    float64\n",
      "患有糖尿病标识       int64\n",
      "dtype: object 编号            int64\n",
      "性别            int64\n",
      "出生年份          int64\n",
      "体重指数        float64\n",
      "糖尿病家族史       object\n",
      "舒张压         float64\n",
      "口服耐糖量测试     float64\n",
      "胰岛素释放实验     float64\n",
      "肱三头肌皮褶厚度    float64\n",
      "dtype: object\n"
     ]
    }
   ],
   "source": [
    "train_df = pd.read_csv('data/train.csv', encoding='gbk')\n",
    "test_df = pd.read_csv('data/test.csv', encoding='gbk')\n",
    "submit_df = pd.read_csv('data/submit.csv', encoding='gbk')\n",
    "\n",
    "print(train_df.shape, test_df.shape)\n",
    "print('-'*20)\n",
    "print(train_df.dtypes, test_df.dtypes)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de05663e",
   "metadata": {},
   "source": [
    "# 任务2：比赛数据分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "aa1d0138",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "编号          0.000000\n",
      "性别          0.000000\n",
      "出生年份        0.000000\n",
      "体重指数        0.000000\n",
      "糖尿病家族史      0.000000\n",
      "舒张压         0.048718\n",
      "口服耐糖量测试     0.000000\n",
      "胰岛素释放实验     0.000000\n",
      "肱三头肌皮褶厚度    0.000000\n",
      "患有糖尿病标识     0.000000\n",
      "dtype: float64\n",
      "编号          0.000\n",
      "性别          0.000\n",
      "出生年份        0.000\n",
      "体重指数        0.000\n",
      "糖尿病家族史      0.000\n",
      "舒张压         0.049\n",
      "口服耐糖量测试     0.000\n",
      "胰岛素释放实验     0.000\n",
      "肱三头肌皮褶厚度    0.000\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "# 缺失值计算\n",
    "print(train_df.isnull().mean(0))\n",
    "print(test_df.isnull().mean(0))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "60dcce13",
   "metadata": {},
   "outputs": [],
   "source": [
    "label = '患有糖尿病标识'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "00b0da2a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "分类特征: ['性别', '糖尿病家族史']\n",
      "连续特征: ['编号', '出生年份', '体重指数', '舒张压', '口服耐糖量测试', '胰岛素释放实验', '肱三头肌皮褶厚度']\n"
     ]
    }
   ],
   "source": [
    "columns = list(train_df.columns)\n",
    "series_features = []\n",
    "cat_features = []\n",
    "for col in columns:\n",
    "    if col != label:\n",
    "        # 默认不同值长度大于10的为连续特征\n",
    "        if len(set(train_df[col])) > 10 or len(set(test_df[col]))> 10:\n",
    "            series_features.append(col)\n",
    "        else:\n",
    "            cat_features.append(col)\n",
    "print('分类特征:',cat_features)\n",
    "print('连续特征:',series_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "f1644e7e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>编号</th>\n",
       "      <th>性别</th>\n",
       "      <th>出生年份</th>\n",
       "      <th>体重指数</th>\n",
       "      <th>舒张压</th>\n",
       "      <th>口服耐糖量测试</th>\n",
       "      <th>胰岛素释放实验</th>\n",
       "      <th>肱三头肌皮褶厚度</th>\n",
       "      <th>患有糖尿病标识</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>编号</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.006603</td>\n",
       "      <td>-0.006693</td>\n",
       "      <td>0.000028</td>\n",
       "      <td>0.003495</td>\n",
       "      <td>-0.005840</td>\n",
       "      <td>0.020441</td>\n",
       "      <td>0.030330</td>\n",
       "      <td>0.027435</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>性别</th>\n",
       "      <td>0.006603</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.119563</td>\n",
       "      <td>0.075186</td>\n",
       "      <td>0.078870</td>\n",
       "      <td>0.011463</td>\n",
       "      <td>-0.053597</td>\n",
       "      <td>0.014037</td>\n",
       "      <td>0.031480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>出生年份</th>\n",
       "      <td>-0.006693</td>\n",
       "      <td>-0.119563</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.074603</td>\n",
       "      <td>-0.154631</td>\n",
       "      <td>0.002085</td>\n",
       "      <td>0.058585</td>\n",
       "      <td>-0.013111</td>\n",
       "      <td>-0.068225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>体重指数</th>\n",
       "      <td>0.000028</td>\n",
       "      <td>0.075186</td>\n",
       "      <td>-0.074603</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.159903</td>\n",
       "      <td>-0.001796</td>\n",
       "      <td>-0.034507</td>\n",
       "      <td>0.026321</td>\n",
       "      <td>0.377919</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>舒张压</th>\n",
       "      <td>0.003495</td>\n",
       "      <td>0.078870</td>\n",
       "      <td>-0.154631</td>\n",
       "      <td>0.159903</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.020317</td>\n",
       "      <td>-0.206663</td>\n",
       "      <td>0.076147</td>\n",
       "      <td>0.157421</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>口服耐糖量测试</th>\n",
       "      <td>-0.005840</td>\n",
       "      <td>0.011463</td>\n",
       "      <td>0.002085</td>\n",
       "      <td>-0.001796</td>\n",
       "      <td>-0.020317</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.093715</td>\n",
       "      <td>-0.006483</td>\n",
       "      <td>0.178133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>胰岛素释放实验</th>\n",
       "      <td>0.020441</td>\n",
       "      <td>-0.053597</td>\n",
       "      <td>0.058585</td>\n",
       "      <td>-0.034507</td>\n",
       "      <td>-0.206663</td>\n",
       "      <td>0.093715</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.015479</td>\n",
       "      <td>0.156656</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>肱三头肌皮褶厚度</th>\n",
       "      <td>0.030330</td>\n",
       "      <td>0.014037</td>\n",
       "      <td>-0.013111</td>\n",
       "      <td>0.026321</td>\n",
       "      <td>0.076147</td>\n",
       "      <td>-0.006483</td>\n",
       "      <td>-0.015479</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.410667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>患有糖尿病标识</th>\n",
       "      <td>0.027435</td>\n",
       "      <td>0.031480</td>\n",
       "      <td>-0.068225</td>\n",
       "      <td>0.377919</td>\n",
       "      <td>0.157421</td>\n",
       "      <td>0.178133</td>\n",
       "      <td>0.156656</td>\n",
       "      <td>0.410667</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                编号        性别      出生年份      体重指数       舒张压   口服耐糖量测试  \\\n",
       "编号        1.000000  0.006603 -0.006693  0.000028  0.003495 -0.005840   \n",
       "性别        0.006603  1.000000 -0.119563  0.075186  0.078870  0.011463   \n",
       "出生年份     -0.006693 -0.119563  1.000000 -0.074603 -0.154631  0.002085   \n",
       "体重指数      0.000028  0.075186 -0.074603  1.000000  0.159903 -0.001796   \n",
       "舒张压       0.003495  0.078870 -0.154631  0.159903  1.000000 -0.020317   \n",
       "口服耐糖量测试  -0.005840  0.011463  0.002085 -0.001796 -0.020317  1.000000   \n",
       "胰岛素释放实验   0.020441 -0.053597  0.058585 -0.034507 -0.206663  0.093715   \n",
       "肱三头肌皮褶厚度  0.030330  0.014037 -0.013111  0.026321  0.076147 -0.006483   \n",
       "患有糖尿病标识   0.027435  0.031480 -0.068225  0.377919  0.157421  0.178133   \n",
       "\n",
       "           胰岛素释放实验  肱三头肌皮褶厚度   患有糖尿病标识  \n",
       "编号        0.020441  0.030330  0.027435  \n",
       "性别       -0.053597  0.014037  0.031480  \n",
       "出生年份      0.058585 -0.013111 -0.068225  \n",
       "体重指数     -0.034507  0.026321  0.377919  \n",
       "舒张压      -0.206663  0.076147  0.157421  \n",
       "口服耐糖量测试   0.093715 -0.006483  0.178133  \n",
       "胰岛素释放实验   1.000000 -0.015479  0.156656  \n",
       "肱三头肌皮褶厚度 -0.015479  1.000000  0.410667  \n",
       "患有糖尿病标识   0.156656  0.410667  1.000000  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 相关性计算\n",
    "train_df.corr()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "17b1ba7d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='患有糖尿病标识', ylabel='count'>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(x='患有糖尿病标识', hue='性别', data=train_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "ef97a80f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='患有糖尿病标识', ylabel='出生年份'>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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NjaWVq1aKWU//fQTly5d4r777mPevHlcuHCBcePG0alTJ4dkPXbsWB5//HEWLFjg0LoTZY90qYky7dSpU3z99dd0796dRx99FJPJhEql4tixY8pfypGRkXh4eLBlyxa+//572rVrR69evejbty+//fYbubm5DuuGFbZfi8lkYty4ccok0xuHDQPK/Jf8L+Z169axe/duFi5cCNj+sj906FCBi4nmv+b9999Pnz596N27N3Xr1rUbDGG1WomMjOT48eMAdsmtR48eyjygG9cvW7JkCS1btiQgIEDZEuD+++9n3bp1dmujqdVqAgICiI6OJjk5ucBWi8lkUpJtixYt+M9//oOHhwdz5sxh/fr1nDlzhqFDhyrH16lThzp16thdo169etStW5fPPvsMvV7PkCFDqFGjBjExMQ5JzsPDg5iYGP7xj38wbdo0OnfufMvlckTpJglHlGn33Xcfb775pvKQXqPR0KhRI+Li4oiLi7M71t/fn7CwMJ5//nkA3nrrLXQ6XYErMRc2DFej0XDlyhXOnDlD//79HUaG5dPr9eTl5XHkyBH69OnDE088AdgGKHTv3t1uT5lTp07RtWtXZWi3Vqu125bgxq42lUrFP/7xDx588EGefPJJKleubPe6DzzwgN3PJ0+e5MSJE8yYMUOJK9+N2xHkCwoKYsGCBdx///106dLFof7GhAPX59I0atSIH3/8kSFDhijL+xQmJCSEDRs2oNPpSE1NJSQkhOnTp9stEXSjqlWrMnPmTHQ6nSSbMk5llSm8QtwRk8lUpO0CSovk5GRq1Khx2wUy8x0+fJhGjRrJQ3pR7CThCCGEcAr5E0YIIYRTSMIRQgjhFJJwhBBCOIUkHCGEEE7x/2zIi3mrwh7nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.boxplot(y='出生年份', x='患有糖尿病标识', hue='性别', data=train_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "fa7569d6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='患有糖尿病标识', ylabel='体重指数'>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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Tp160etffvll12ch1G4iWQhewWg08sgjj3D//fe7tv3vf/9j586dzJs3z7Xt77//5vbbb8dkMrm2HTx4kLvuuguTyeS623A4HOTn52M2m8tdetPpdKLX69m8eTNBQUG0b9+eZcuWuRZ82rx5M/Xq1aN37958+OGHfPfddzgcDmw2GxMmTGDOnDlERESUue+SBFFUVFSlhXou7AdwOBz8+eefDBgwAB8fH2JjY/n6668r3U/Ja318fC7aLklSqcWsOnfuzObNm/Hz8yt1FyLLMoWFhRQVFREUFHTRfkaPHs2ePXtciUaj0RAQEMDw4cMveu7bb78tFiqqI0SyELyC1Wpl1qxZzJo166LHWrZsedE2u93uOsF1796dffv2lXr82WefZeXKlaxZs6bcE/qF+vXrx7lz51x3LHv27GH48OGu4yQkJDBs2DDX8/v27ev6eceOHa67Cvh3JbeuXbtW6dhQ3AxVYvfu3dx///3Mnj0bHx8fdDodZrMZnU6HXq+v8ARcWFhIXl4esixjsVh4+OGHMRgMpKSkkJmZyUMPPYTVauXRRx+lVatWF71eo9Hg5+dX6v1c6Pnnn3f9fGETVln7E2o/kSwEr/Dtt99etNDShx9+yK5du0qVSS9R0QJMO3bsYPHixdxwww3Y7fYy+zwAgoOD8fX1df1+zz33AMV3NACffPIJNpuN48ePA8Xt9T/99BOyLDNmzBgWLFjA2bNneeKJJ0rd6UBxmz8U351cyGKxkJSURMOGDUu9j/Ov7rt27cqECRN48sknGTZsGJIkcd9997F169Zy3/eFtm3bhtFopEePHgQGBvLxxx9jNBrp06cPVqsVo9GILMvlnsxlWcZqteLj40NWVhZnz551vc+AgADCwsIALlp6V6ibRLIQVGexWEp1IJfIz8/HZrORnJx80WPBwcGEhIRctD07O5tp06ahKArff/8933//fbnHfeONNxg7diwASUlJ3H///ej1etLS0igoKGDcuHHY7XamT58OQHp6Or6+vuTn51+0r/j4eBo1auQ6+TudTnQ6XZkx7ty5k9tvv53PPvus1N3JhR38Tz31FP369WPXrl1IksTMmTNxOByl7ixefvllDh06xDfffON6XUlTmZ+fHxqNhilTpuB0OnnttdcICQlh7NixGAwG2rdv7+oMr8jevXv5+++/eeSRR1zbbr31VtfdhahFemUQyUJQ3cGDB7n55pvLffz8pp8SF/ZvQPHJ9uGHHyYxMZHx48fz6quvlrm/zMxMrr766lJX8kajkXbt2mE0GlmxYgV+fn6uk6ksy8DFHe233nqr6+eRI0fyww8/0L59e6C4Wc1kMrmuzk0mk+sK/PyEUuK7777jp59+4oMPPnAlGJPJRP/+/dm1axcajYb69etf9F40Gg0+Pj6uq/zy7Nixg6KiIgoKChg7diwzZsxg0aJFBAQEoNPpkCSJF154AVmWefnll4F/k47BYOC6665jz5496PV6Bg0aVKqjvOTzKY9IJnWDSBaC6kpOPKtWraJp06au7WV1cENxX8GFzT5FRUU89NBD7Nq1Cx8fHwoLC8ttfsrNzQVKt6WHh4fz+uuvk5mZycKFC2nZsiVxcXG0b9+eAwcOYDAY2LNnD3a7HYvFQvfu3Vm/fj2JiYlMnjzZdSItkZ2dTWBg4EX9HDqdjs8//xyArVu3MmDAAFavXs1LL73EuHHjypzwZrfb0Wg0FBUVXTRnJDc3F0VRLhrtFRQURGhoqOv3lStXAsWJymg08s477zBnzpxSrzEajTidzjITj16vL/X+zu+ncDqd2Gy2Mkec2e32i5oXhdpJJAtBdSVNIWXdQUDZHdznDzNNSkri0Ucf5cCBA7z33nu89tprrFq1ilWrVlV43LLa2kv6JKC4GWjixInExsbi6+t70Yn//DsNRVFKnUCzsrIICwsjJiaGTZs2YTKZeP7557FYLK6T+HfffYfZbGbOnDm88sorjBs3rtT+/vrrL+bPn8+GDRvo1KkTBw4cKHU3c74LP7vJkyczbdo0ADIyMvjpp5/o0aMHp0+f5v777+eBBx5g+/btnDx5EkVRXM1xUNxB/uabb3LffffRoEGDCj9DKP73O3bsWLn/fhc2rwm1k0gWguratm3L+vXrL9o+d+5c9u3bV+aErpIRS0VFRdx5552cO3eOmTNnMnDgQF577bUqNUNdyOFwMH/+fMLCwtBoNIwYMYKvv/6au+66i4CAABo1asTy5ctxOp2uDu6SpqHzm2UATp8+TaNGjdDpdISGhpKSksK6dev44osvXM/p3Lkzn3zyCV999RVdunQp9fqjR48yZcoUrr76aq677joKCgpczWbr1q0jJiYGRVHo0aMHHTt25NNPP3UlvxEjRpSK5/3338fX15e4uDg+//xz+vbtyxNPPEGHDh147bXXsFqtjB8/3vX8c+fO8cMPP5Cbm+vq7K/I+e9JqLvEmDZBdQaDgUaNGl3031VXXUWvXr3KfKwkWfj4+PDxxx/z2WeflRrnX9IMVdZ/ZXWYA3z//ffk5OS4rpDj4uIYOXIkhw8fJjY2FqvVitlsxmQyceedd+Lv7+967YXt9jt37ix1R/Tiiy/SpUsXunXr5tp233334ePjw9GjRy+KpWXLlsyePZu5c+diNpsJDQ29aIjqvn37yMnJ4e+//+aZZ54p1dxTMs9j7dq1fPvtt0ydOtXVjGQwGLj77rvJyMjgwIED3HbbbaXuspo2bcrNN9/MqlWr2L59e5mfFcAvv/zChg0bgOLO/zlz5ria0Ww2G2+99RZFRUXlvl6oXcSdhaC6DRs20LNnT/R6Pampqfj7++Pr60urVq2YN2+ea5hnic8//5zOnTu7rsabNm1aqq8DqFIz1PlSUlKYNWtWqQl8HTp0oEOHDgwZMoShQ4fy1Vdf8cEHH7geP/+Kev369TRq1AgobhZLSUmhU6dOAHz22Wds3LiRpUuXljpmaGgo06dP57HHHqOwsJA777yz1Em7pJkrMTGRnj17lupjURSFWbNm0ahRI2bMmMEdd9wBwGuvvVbqGG3atGH06NFcf/31LFq0qNRjCxcuxGw2l1lf6sEHH2Tx4sXMnDmThQsXXvT4/v37WbBgAddddx39+vXj7bff5qeffqJLly506tSJP/74g88++4z4+Hg++OADMdeiDhD/goKqSiaJTZs2jZycHPr16+c6qR45cuSieRYpKSnMnj2badOmUVhYWO5+x48fz5EjR8r8r6y5D1arlYCAAO68885S20va9fv27YvRaKR79+6l9lWSkM7v/P3uu+/w9/enU6dOLFiwgLfffpvnnnuO2NjYi447bNgwpk6dyowZM7jlllvYtWvXRXEdOHCAtm3blhpV9N577/HXX39x33330aVLF6ZOncqPP/7Izz//XOr1UVFRzJgx46Lj5uTk8M033zBy5MgyJ98FBQUxevRodu/efdHcDpvNxubNm2natCkvvPAC69at48cff+TRRx91JciBAwdyxx13sH79embOnHnR/oXaRyQLQVVz587FZrMxadIk191DyUinYcOGMXToUGRZJisri4ceeoiMjAxmzpxJUlISr7/+epn7rGwoZ0mH6/lX8dHR0SxcuJDAwMBSz/3www9p06YNV111FXq9HqvVWqpJKzU1Ffg3WRw7doyvv/6aQYMGkZSUxCeffMLYsWO58cYby43vnnvu4c033+TgwYM899xzZGdnux5bv349iqLQvXt31+tOnjzJ999/z9VXX+3qa5g8eTIfffQRgwcPxmazldl573Q6Xc1Ex44dw2Qycdttt7kez8vLK/W6O+64g9mzZ9O9e3fXtt9//520tDSio6P57LPPSE5OZtq0aVx33XUXJdqnnnqKnj178sUXX1x0VyXUPqIZSlDNiRMn+PLLLxkxYgQdO3bE4XAgSRIHDx50XaHef//9aLVaVq1axbp16+jbty833HADt9xyC7t376aoqOiiOkjlrbfgcDiYNm2aawLg+UNLAdf8hpKT6pIlS9i4cSNz584Fiq+o9+zZU2Zhw5JjNm7cmJtvvpkJEyYQGxtbquNeURTuv/9+Dh8+DFAqMY0ZM8Y1z+P8ekzz5s2jW7duBAUFucqCN27cmCVLlpSq9aTRaAgKCuLNN98kKSmpzLsFh8PhSpRdu3blt99+Q6vV8uGHH7J06VJOnTrFvffe63p+kyZNaNKkSal9NG3alNjYWN5//32sVitTpkwhMjKSmTNnXpSgtFotM2fOZNSoUbzyyisMHDiwwhIigncTyUJQTXR0NI8++qirQ1mn09GuXTvmz5/P/PnzSz03MDCQkSNHMnr0aAAef/xxDAZDmRVdyxuqqdPpyMzM5NSpU0ycOPGiEUglrFYrFouFffv2cfPNN9OrVy+guDN9xIgRpdaEOHHiBMOGDXMN/9Xr9aVKk5/fPCVJEqNGjaJFixZcc8011KtXr9RxmzVrVur3o0ePcuTIEd544w1XXCXOL0leIjQ0lC+++ILGjRsTFxd30ePnJwv4d65Eu3bt+PXXX5kyZYqr5El5oqKiWLZsGQaDgXPnzhEVFcVrr71WqmzK+cLDw5kxYwYGg0EkilpOUsT0SuEK4nA4qlQy3FskJSURGRlZabG+Env37qVdu3aiQ1mocSJZCIIgCJUSlx+CIAhCpUSyEARBEColkoUgCIJQKZEsBEEQhEr9P95VbZUAujz7AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.violinplot(y='体重指数', x='患有糖尿病标识', hue='性别', data=train_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "b9fdf86a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='患有糖尿病标识', ylabel='体重指数'>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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O3dO2M5sNiMmJgbe3t5SlUpEVOFJEhZXr17FRx99hK5du2LAgAFW69544w1ERkYiNTUVALB37148efIErVq1kqJUIiKCBH0Wer0eH374IVQqFd5++21cvHhRWFezZk0MHjwYUVFR6Nu3Lxo2bIg9e/agY8eOCA4OLulSqQgdOfI7Dh8+WOD9Y2PvAAAWLJhV4GO0adMerVu3K/D+5Ulp+HsA/JuUJSUeFlevXsWtW7cAAO+++67Vus2bN6NFixaIiorCkiVLcPXqVQwZMgRjx44t6TKplHF1dZW6BMqGf4+Kp8TDom7durhy5Uqe2/j4+GDhwoUlVBGVhNat2/EbZCnCvwc9L8mfsyjPSsOlPi/ziagoMCxKMV7qE1FpwbAoRrzUJ6LyQtKH8oiIqGxgWBARkSiGBRERiWJYEBGRKIYFERGJYlgQEZEohgUREYliWBARkSiGBRERiWJYEBGRKIYFERGJYlgQEZEohgUREYliWBARkSiGBRERiWJYEBGRKIYFERGJYlgQEZEohgUREYliWBARkSiGBRERiWJYEBGRKIYFERGJYlgQEZEohgUREYliWBARkSiGBRERiWJYEBGRKIYFERGJYlgQEZEohgUREYliWBARkSiGBRERiWJYEBGRKIYFERGJYlgQEZEohgUREYliWBARkSiGBRERiWJYEBGRKIYFERGJYlgQEZEohgUREYliWBARkahSGxYmkwlfffUVWrdujbZt22Lz5s1Sl0REVGGV2rBYsWIF1q1bh5EjR+LTTz/F119/jejoaKnLKlH/+c9vGD58IA4ePCB1KZKLjb2NMWNGIC7ujtSlEFVIpTIs0tLSsH79eowaNQpDhw5F586dMWnSJISHh0tdWonasmUjAGDTpg3SFlIKrFkTjszMTKxevVLqUogqpFIZFmfOnIFWq0W3bt2EZR07dsT169cRHx8vYWUl5z//+Q2A+e/fzBX66iI29jbu378HALh//x6vLogkoJC6AFsePXoEtVoNf39/YZmrqyscHR0RGxsLHx8fCasrGVlXFVk2bdqA9u07SVOMxNassb6iXL16JWbPXiRRNVTeHDnyOw4fPljg/WNjLV9eFiyYVag62rRpj9at2xXqGMWpVIaFRqOBs7MzZDKZ1XJ7e3skJibm+zienk5FXVoJMuf43cvLWZJKpJZ1VZH994r6XlDRc3Fx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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.boxplot(y='体重指数', x='患有糖尿病标识', hue='性别', data=train_df)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "80cb4104",
   "metadata": {},
   "source": [
    "# 任务3：逻辑回归尝试"
   ]
  },
  {
   "attachments": {
    "%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92%E6%88%AA%E5%9B%BE.png": {
     "image/png": "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0EObW2+9tfnhhx/a2mnGXEg73B9//NG88cYbzbnnntsccMABaR/al7apzujvl156qTnttNNSf9lxxx13ND/++GPbYsJvv/3WPPLII83RRx+d2p144onNU0891fz+++9tiwlfffVVc91116Vx1E7tH3744eaXX35pW8CsKIjvueeelMiU0KIoCgei0DYHft5OqL+26dOUtkXi+GoTE+xYnCTcT37qpFCys4T9vy/pwtbms88+ay666KKUsw4++ODmqquuavbt29fWLhP9ach/TfTjHPmU48vEfFvqp3rtX/3sk3EfqpNdpVjMbSn59pC/x/HdtmRnH7bL/fJzmdvZhWzU/mXHZjO3Iv/6668nJ5YIP/30083tt9+ehPHyyy/vPFG//vprEsxbbrllRbn55pvThdF4diIJdxxfRSKvbaozbnfppZemGaztuOyyy5aEXhMBCb8C74Ybbmj+/e9/JzsPPPDAJPxGwXj66ac3Rx11VPPAAw80L7zwQhJ8TTBkpyYKsHoccH0JoyuxKAiVrPKiBPXkk0+mz1K9i8dX8CPysBF88sknzbHHHpt84bHHHks5RLnkzDPPTDcPOcpVylm5MAn5kuPAxDgx9qk+gXLsdLWJ+xoTi8LtHE8x1lw0sdc+S3UuHt/HkR/fELbL/fJzaTuHQOQzdFd7xRVXNOeff37z/ffft1ub5sUXX0yCK3GchXfffbc58sgj04mWIEucL7jggjQjjnfk2pf2qTpt/+6775qzzz576uI8++yzScD37NmTvn/88cfpjvzee+9dWgWQYOvin3TSSc2XX36Ztt13333JYWWPUXv1O+yww5p33nmn3QproSthiL7E4kSQi2QpSUbi+E5KHnMsaq+k5H4xKeR2dtFlP2x9lCduu+225oQTTmg+//zzduskt8nflFu6KPmvfMlxYKIfC/tdLpx9ZUjI4j6iDbmP57aURHLI3+P4bhvHHIPtcr/8XOZ2dlGyf7OYS5H/9NNPm2OOOWbq4ll0dVItpkNYuKOga0asC/Xggw+m75F//OMfS47xn//8J915a9k9oiX9gw46aMkhVa9Ai0Ek1M6rB5q4XHvttc3FF1+8YmIh9FjiT3/609J4sDYcmKUkVCo+7w5g3bnrGb/GmRWNEUXe30v7jT6j9trmfjEp+HiG/GMo6Rm1u+uuu5YeLelT352A/Ojp+OOP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"
    }
   },
   "cell_type": "markdown",
   "id": "743c0623",
   "metadata": {},
   "source": [
    "![%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92%E6%88%AA%E5%9B%BE.png](attachment:%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92%E6%88%AA%E5%9B%BE.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "8bec5bcd",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 均值填充空值\n",
    "舒张压_mean = train_df['舒张压'].mean()\n",
    "train_df['舒张压'] = train_df['舒张压'].fillna(舒张压_mean)\n",
    "test_df['舒张压'] = test_df['舒张压'].fillna(舒张压_mean)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "2b0059a4",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "features = ['出生年份', '体重指数', '舒张压', '口服耐糖量测试', '胰岛素释放实验', '肱三头肌皮褶厚度', '性别']\n",
    "label = '患有糖尿病标识'\n",
    "\n",
    "clf = LogisticRegression(random_state=0).fit(train_df[features], train_df[label])\n",
    "predict = clf.predict(test_df[features])\n",
    "submit_df['label'] = predict\n",
    "submit_df.to_csv('result/逻辑回归.csv', index = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "e73b384b",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n",
    "clf = RandomForestClassifier(max_depth=8, random_state=0)\n",
    "clf.fit(train_df[features], train_df[label])\n",
    "predict = clf.predict(test_df[features])\n",
    "submit_df['label'] = predict\n",
    "submit_df.to_csv('result/随机森林.csv', index = False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3b266cf9",
   "metadata": {},
   "source": [
    "# 任务4：特征工程（使用pandas完成）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "106f2f8f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>平均体重指数</th>\n",
       "      <th>平均舒张压</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>37.197603</td>\n",
       "      <td>88.786209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>37.197603</td>\n",
       "      <td>88.786209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>38.925216</td>\n",
       "      <td>90.181523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>38.925216</td>\n",
       "      <td>90.181523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>37.197603</td>\n",
       "      <td>88.786209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5065</th>\n",
       "      <td>1</td>\n",
       "      <td>38.925216</td>\n",
       "      <td>90.181523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5066</th>\n",
       "      <td>1</td>\n",
       "      <td>38.925216</td>\n",
       "      <td>90.181523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5067</th>\n",
       "      <td>0</td>\n",
       "      <td>37.197603</td>\n",
       "      <td>88.786209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5068</th>\n",
       "      <td>0</td>\n",
       "      <td>37.197603</td>\n",
       "      <td>88.786209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5069</th>\n",
       "      <td>0</td>\n",
       "      <td>37.197603</td>\n",
       "      <td>88.786209</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5070 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      性别     平均体重指数      平均舒张压\n",
       "0      0  37.197603  88.786209\n",
       "1      0  37.197603  88.786209\n",
       "2      1  38.925216  90.181523\n",
       "3      1  38.925216  90.181523\n",
       "4      0  37.197603  88.786209\n",
       "...   ..        ...        ...\n",
       "5065   1  38.925216  90.181523\n",
       "5066   1  38.925216  90.181523\n",
       "5067   0  37.197603  88.786209\n",
       "5068   0  37.197603  88.786209\n",
       "5069   0  37.197603  88.786209\n",
       "\n",
       "[5070 rows x 3 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df['平均体重指数'] = train_df.groupby('性别').transform('mean')['体重指数']\n",
    "train_df['平均舒张压'] = train_df.groupby('性别').transform('mean')['舒张压']\n",
    "train_df[['性别','平均体重指数','平均舒张压']]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ca52ce8",
   "metadata": {},
   "source": [
    "- 不使用平均统计：0.73998\n",
    "- 使用平均统计：0.74911"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "f91fc063",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7491103202846975\n"
     ]
    }
   ],
   "source": [
    "\n",
    "\n",
    "X_train,X_test,y_train,y_test = train_test_split(train_df[features],train_df[label],test_size=0.3)\n",
    "\n",
    "clf = LogisticRegression(random_state=0).fit(X_train, y_train)\n",
    "predict = clf.predict(X_test)\n",
    "\n",
    "print(f1_score(y_test, predict))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e5c21fc",
   "metadata": {},
   "source": [
    "# 任务5：特征筛选"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "702d7f56",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['体重指数', '肱三头肌皮褶厚度', '口服耐糖量测试', '舒张压', '胰岛素释放实验']"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import lightgbm as lgb\n",
    "\n",
    "features = ['出生年份', '体重指数', '舒张压', '口服耐糖量测试', '胰岛素释放实验', '肱三头肌皮褶厚度', '性别', '平均体重指数', '平均舒张压']\n",
    "label = '患有糖尿病标识'\n",
    "# 简单巽离岸\n",
    "clf = RandomForestClassifier(max_depth=8, random_state=0)\n",
    "clf.fit(train_df[features], train_df[label])\n",
    "# 排序特征重要性\n",
    "importance_list = list(clf.feature_importances_)\n",
    "importance_dict = {}\n",
    "for i in range(len(features)):\n",
    "    importance_dict[features[i]] = importance_list[i]\n",
    "sort_list = sorted(importance_dict.items(), key=lambda x: x[1], reverse=True)\n",
    "new_features = []\n",
    "# 获取TOP5特征\n",
    "for i in range(5):\n",
    "    new_features.append(sort_list[i][0])\n",
    "new_features"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e3c04670",
   "metadata": {},
   "source": [
    "- TOP5特征：0.7427"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "7eedd918",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7427007299270072\n"
     ]
    }
   ],
   "source": [
    "# 逻辑回归重新训练\n",
    "X_train,X_test,y_train,y_test = train_test_split(train_df[new_features],train_df[label],test_size=0.3)\n",
    "\n",
    "clf = LogisticRegression(random_state=0).fit(X_train, y_train)\n",
    "predict = clf.predict(X_test)\n",
    "\n",
    "print(f1_score(y_test, predict))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e06113eb",
   "metadata": {},
   "source": [
    "# 任务6：高阶树模型"
   ]
  },
  {
   "attachments": {
    "LGB%E6%88%AA%E5%9B%BE.png": {
     "image/png": "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448/Pont5Zdf3jz22GPp76677po67ccff2xzjjqeOviLIEa68cYbmy+//LLNNeLbb79t/vKXv6QO7xPO119/PbV3lkdKswq2UeOE0Bc4RLYlL7zwQgroJ554YvPwww831113XRLPc845Z5FdYt/MBjds2JBsvrRdYlse3/qEM8QxRKwkF78yT1e9lEc9/KWuLl+MtkR5tHOoz7766qsp1tNPf/7zn1M/PfXUUynWH3zwwen4fffdN6cPIZz0Ya4N9B19S376faksi3DS+GuvvbY59NBDmw8++KA9OprN8bBuvfXW9shiuHlE8sknn2yPjMqjsw888MDmnXfeSccYfZx++unNZZddtkBMSzj39ttvNyeffPLcqKMUTgzgrrvuSh3KeYVz5YF9DHXCIIKDwinbCwb05557bopPn3/+eXu0SfGP4P7EE0+0RxbTJWBDhLNvNjYuhdhBV70hnMycOZfnD5YqnGgIWsJK4HvvvdcenQctOPvss5Owxswz7jG/7yB06Morr2yP1LMswvnZZ581xx57bOqYXNS+++675rzzzhsbqLiGaykj58MPP2wOOeSQtDwLzEwPP/zwzgeUEw8LUUQcWTrODQsog04+9dRTm/vvv1/hXIHwDEsnZKuAoBRbBTfccEPz+OOPzz3fEE5s4qGHHkojV1YkWDJ78cUXxw7IgOsZ8R5wwAHJfvjL57BttgbuvvvuZLecxwZZVooVF2YWnMO2cz7++OO0HMXgc1IbZGWDEDAhKONYXwzN4RrsF7HCprGxPOEPb775ZvrbJSABvsD1fbEUO2XlL4h6u4Tz5ptvXuSHwVKEk3vHbyfNEJmRspq5fv369HmccEY7Jk26xrEswvnWW281++23X+eDuOmmm5Lg9S3X0pknnXTSovX9EM4QPZZVWd8mMCF4BDwC17p169IoLvj000/n1sAjUJbC+be//W3uOjpa4Vx5YGu5E7KX/stf/jJtD7BNwHYB5wlSpXDusssuzV577ZVskyUghBNHHRdsYpRbbinwmf0pRJM2UQ779cwcbrvttlT3Kaeckq5/+eWXm913331BUALq5TrEW2abZ599NsWu0tawn4suuiitquXCmNt4l4AR2/L4FiJB+fHvXFxrE+V01RvCGXETsS1jaN4WoJ35/XQRA4iyvklQR7Q3hzKIB/h7ea6GZRFOOowH/fTTT7dH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"
    }
   },
   "cell_type": "markdown",
   "id": "e5cbc175",
   "metadata": {},
   "source": [
    "![LGB%E6%88%AA%E5%9B%BE.png](attachment:LGB%E6%88%AA%E5%9B%BE.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "684e6579",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_df = pd.read_csv('data/train.csv', encoding='gbk')\n",
    "test_df = pd.read_csv('data/test.csv', encoding='gbk')\n",
    "submit_df = pd.read_csv('data/submit.csv', encoding='gbk')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "c00fffa1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 均值填充空值\n",
    "舒张压_mean = train_df['舒张压'].mean()\n",
    "train_df['舒张压'] = train_df['舒张压'].fillna(舒张压_mean)\n",
    "test_df['舒张压'] = test_df['舒张压'].fillna(舒张压_mean)\n",
    "# 构建新特征\n",
    "train_df['平均体重指数'] = train_df.groupby('性别').transform('mean')['体重指数']\n",
    "train_df['平均舒张压'] = train_df.groupby('性别').transform('mean')['舒张压']\n",
    "test_df['平均体重指数'] = test_df.groupby('性别').transform('mean')['体重指数']\n",
    "test_df['平均舒张压'] = test_df.groupby('性别').transform('mean')['舒张压']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "810da3ec",
   "metadata": {},
   "outputs": [],
   "source": [
    "features = ['出生年份', '体重指数', '舒张压', '口服耐糖量测试', '胰岛素释放实验', '肱三头肌皮褶厚度', '性别', '平均体重指数', '平均舒张压']\n",
    "label = '患有糖尿病标识'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "b159d2ec",
   "metadata": {},
   "outputs": [],
   "source": [
    "# model = lgb.LGBMClassifier()\n",
    "model = lgb.LGBMClassifier(num_leaves=16,\n",
    "                           max_depth=6,\n",
    "                           learning_rate=0.05,\n",
    "                           n_estimators=1000,\n",
    "                           subsample=0.8,\n",
    "                           feature_fraction=0.8,\n",
    "                           reg_alpha=0.5,\n",
    "                           reg_lambda=0.5,\n",
    "                           random_state=2022,\n",
    "                           metric='auc',\n",
    "                           boosting_type='gbdt',\n",
    "                           subsample_freq=1,\n",
    "                           bagging_fraction=0.8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "a83d468b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Warning] feature_fraction is set=0.8, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8\n",
      "[LightGBM] [Warning] bagging_fraction is set=0.8, subsample=0.8 will be ignored. Current value: bagging_fraction=0.8\n",
      "0.9461606354810238\n"
     ]
    }
   ],
   "source": [
    "X_train, X_val, y_train, y_val = train_test_split(train_df[features],train_df[label],test_size=0.3)\n",
    "\n",
    "\n",
    "model = model.fit(X_train, y_train)\n",
    "\n",
    "y_predict = model.predict(X_val)\n",
    "print(f1_score(y_val, y_predict))\n",
    "\n",
    "predict = model.predict(test_df[features])\n",
    "submit_df['label'] = predict\n",
    "submit_df.to_csv('result/lgb_默认.csv', index = False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a5552bd6",
   "metadata": {},
   "source": [
    "# 任务7：多折训练与集成"
   ]
  },
  {
   "attachments": {
    "5%E6%8A%98LGB.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "id": "8ab8b91d",
   "metadata": {},
   "source": [
    "![5%E6%8A%98LGB.png](attachment:5%E6%8A%98LGB.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "98a46297",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Warning] verbosity is set=-1, verbose=-1 will be ignored. Current value: verbosity=-1\n",
      "Training until validation scores don't improve for 50 rounds\n",
      "Early stopping, best iteration is:\n",
      "[166]\tvalid_0's binary_logloss: 0.140619\n",
      "[LightGBM] [Warning] verbosity is set=-1, verbose=-1 will be ignored. Current value: verbosity=-1\n",
      "Training until validation scores don't improve for 50 rounds\n",
      "Early stopping, best iteration is:\n",
      "[167]\tvalid_0's binary_logloss: 0.119581\n",
      "[LightGBM] [Warning] verbosity is set=-1, verbose=-1 will be ignored. Current value: verbosity=-1\n",
      "Training until validation scores don't improve for 50 rounds\n",
      "Early stopping, best iteration is:\n",
      "[273]\tvalid_0's binary_logloss: 0.114617\n",
      "[LightGBM] [Warning] verbosity is set=-1, verbose=-1 will be ignored. Current value: verbosity=-1\n",
      "Training until validation scores don't improve for 50 rounds\n",
      "Early stopping, best iteration is:\n",
      "[240]\tvalid_0's binary_logloss: 0.135496\n",
      "[LightGBM] [Warning] verbosity is set=-1, verbose=-1 will be ignored. Current value: verbosity=-1\n",
      "Training until validation scores don't improve for 50 rounds\n",
      "Early stopping, best iteration is:\n",
      "[324]\tvalid_0's binary_logloss: 0.103437\n",
      "0.9562130177514793\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "from sklearn.model_selection import KFold\n",
    "import lightgbm as lgb\n",
    "\n",
    "# 读取数据\n",
    "train_df = pd.read_csv('data/train.csv', encoding='gbk')\n",
    "test_df = pd.read_csv('data/test.csv', encoding='gbk')\n",
    "submit_df = pd.read_csv('data/submit.csv', encoding='gbk')\n",
    "\n",
    "# 模型交叉验证\n",
    "def run_model_cv(model, kf, X_tr, y, X_te, cate_col=None):\n",
    "    train_pred = np.zeros( (len(X_tr), len(np.unique(y))) )\n",
    "    test_pred = np.zeros( (len(X_te), len(np.unique(y))) )\n",
    "\n",
    "    cv_clf = []\n",
    "    for tr_idx, val_idx in kf.split(X_tr, y):\n",
    "        x_tr = X_tr.iloc[tr_idx]; y_tr = y.iloc[tr_idx]\n",
    "\n",
    "        x_val = X_tr.iloc[val_idx]; y_val = y.iloc[val_idx]\n",
    "\n",
    "        call_back = [\n",
    "            lgb.early_stopping(50),\n",
    "        ]\n",
    "        eval_set = [(x_val, y_val)]\n",
    "        model.fit(x_tr, y_tr, eval_set=eval_set, callbacks=call_back, verbose=-1)\n",
    "\n",
    "        cv_clf.append(model)\n",
    "\n",
    "        train_pred[val_idx] = model.predict_proba(x_val)\n",
    "        test_pred += model.predict_proba(X_te)\n",
    "\n",
    "    test_pred /= kf.n_splits\n",
    "    return train_pred, test_pred, cv_clf\n",
    "\n",
    "features = ['出生年份', '体重指数', '舒张压', '口服耐糖量测试', '胰岛素释放实验', '肱三头肌皮褶厚度', '性别']\n",
    "label = '患有糖尿病标识'\n",
    "\n",
    "clf = lgb.LGBMClassifier(\n",
    "    max_depth=3, \n",
    "    n_estimators=4000, \n",
    "    n_jobs=-1, \n",
    "    verbose=-1,\n",
    "    verbosity=-1,\n",
    "    learning_rate=0.1,\n",
    ")\n",
    "\n",
    "train_pred, test_pred, cv_clf = run_model_cv(\n",
    "    clf, KFold(n_splits=5),\n",
    "    train_df[features],\n",
    "    train_df[label],\n",
    "    test_df[features],\n",
    ")\n",
    "\n",
    "print((train_pred.argmax(1) == train_df[label]).mean())\n",
    "submit_df['label'] = predict\n",
    "submit_df.to_csv('result/5折LGB.csv', index = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "62eed467",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
